package pe.com.bbva.seguridad.dao.impl;

import java.util.HashMap;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.com.bbva.seguridad.dao.UsuarioDAO;
import pe.com.bbva.seguridad.domain.Usuario;
import pe.com.stefanini.core.dao.GenericDAOImpl;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.exceptions.DAOException;

@Service("usuarioDAO")
public class UsuarioDAOImpl extends GenericDAOImpl<Usuario> implements UsuarioDAO {

	Logger logger = Logger.getLogger(this.getClass());

	@Autowired
	public UsuarioDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> findUsuarios(Usuario usuario) throws BOException, DAOException {
		String where = "";
		if (usuario.getCodigo() == null) {
			usuario.setCodigo("");
		}
		where = where + " upper(codigo) like upper('%" + usuario.getCodigo() + "%')";
		if (usuario.getEstado() != null && !usuario.getEstado().equals("")) {
			where = where + " and upper(estado) like upper('%" + usuario.getEstado() + "%') ";
		}
		String orders = " order by fechaCreacion desc,codigo";
		if (where.length() > 0) {
			where = " where " + where;
		}
		List<Usuario> listaUsuarios = super.executeQuery(Usuario.class, where, orders);
		return listaUsuarios;
	}
	
	@SuppressWarnings("unchecked")
	public String getPerfilUsuario(String codigoUsuario) throws BOException, DAOException {
		StringBuilder consulta = new StringBuilder();
		String t = "";
		consulta.append(" SELECT P.CODIGO_PEFIL ")
				.append(" FROM TARGPS.TTARGPS_USUARIO U  ")
				.append(" INNER JOIN TARGPS. TTARGPS_USUARIO_PERFIL UP ")
				.append(" ON UP.NID_USUARIO = U.NID_USUARIO ")
				.append(" INNER JOIN TARGPS.TTARGPS_PERFIL P ")
				.append(" ON P.NID_PERFIL = UP.NID_PERFIL ")
				.append(" WHERE 1=1 ")
				.append(" AND U.CODIGO_USUARIO = '"+codigoUsuario+"' ")
				.append(" AND ROWNUM = 1 ")
				.append(" ORDER BY P.NID_PERFIL DESC ");
		
		List<HashMap<String, Object>> lista = null;
		lista = super.executeSQLtoMapByObject(consulta.toString());
		for (HashMap<String, Object> hashMap : lista) {
			t = hashMap.get("CODIGO_PEFIL")==null?"":(hashMap.get("CODIGO_PEFIL")).toString();
		}
		
		return t;
	}
}